﻿/*
 * NetEventDef.h
 */
#include <gdk/core/Types.h>
#include <gdk/core/Event.h>
#include <gdk/core/Uuid.h>
#include <gdk/net/Socket.h>
#include <gdk/net/NetAddress.h>


namespace gdk
{


//**************************************************
#undef DECLARE_NET_EVENT_BEGIN
#undef DECLARE_NET_EVENT_MEMBER
#undef DECLARE_NET_EVENT_END


//**************************************************
#if defined(IMPLEMENT_NET_EVENT)

#	define DECLARE_NET_EVENT_BEGIN(className)	IMPLEMENT_RT_CREATOR(className)

#	define DECLARE_NET_EVENT_MEMBER(type,name) 

#	define DECLARE_NET_EVENT_END() 


//**************************************************
#elif defined(REGISTER_NET_EVENT)

#	define DECLARE_NET_EVENT_BEGIN(className)	REGISTER_RT_CREATOR(className)

#	define DECLARE_NET_EVENT_MEMBER(type,name) 

#	define DECLARE_NET_EVENT_END() 


//**************************************************
#else

//---------------------------------------------
#define DECLARE_NET_EVENT_BEGIN(className) \
		typedef gdk::Unknown::Handle_T<class className> className##Ptr;\
		class GDK_NET_EXPORT className : public gdk::Event\
		{\
			DECLARE_CLASS_HANDLE(className)\
			DECLARE_CLASS_INSTANCE(className)\
			DECLARE_RT_CREATOR(className)\
		private:\
			className(void)\
			{}\
		public:

#define DECLARE_NET_EVENT_MEMBER(type,name) \
			type name;

#define DECLARE_NET_EVENT_END() \
		};

//**************************************************
#endif



//==================================================
///////////////////////////////Tcp接受连接
DECLARE_NET_EVENT_BEGIN(Evt_NetTcpAccept)
	DECLARE_NET_EVENT_MEMBER(class NetTcpServer*,tcpServer)
DECLARE_NET_EVENT_END()

///////////////////////////////Tcp连接成功
DECLARE_NET_EVENT_BEGIN(Evt_NetTcpConnectOk)
	DECLARE_NET_EVENT_MEMBER(class NetTcpConnection*,conn)
DECLARE_NET_EVENT_END()

///////////////////////////////Tcp连接失败
DECLARE_NET_EVENT_BEGIN(Evt_NetTcpConnectFail)
	DECLARE_NET_EVENT_MEMBER(class NetTcpConnection*,conn)
DECLARE_NET_EVENT_END()

///////////////////////////////Tcp连接关闭
DECLARE_NET_EVENT_BEGIN(Evt_NetTcpClosed)
	DECLARE_NET_EVENT_MEMBER(class NetTcpConnection*,conn)
DECLARE_NET_EVENT_END()

///////////////////////////////Tcp连接中断
DECLARE_NET_EVENT_BEGIN(Evt_NetTcpAbort)
	DECLARE_NET_EVENT_MEMBER(class NetTcpConnection*,conn)
DECLARE_NET_EVENT_END()

///////////////////////////////Tcp连接错误
DECLARE_NET_EVENT_BEGIN(Evt_NetTcpError)
	DECLARE_NET_EVENT_MEMBER(class NetTcpConnection*,conn)
DECLARE_NET_EVENT_END()

///////////////////////////////Tcp收到数据
DECLARE_NET_EVENT_BEGIN(Evt_NetTcpReceive)
	DECLARE_NET_EVENT_MEMBER(class NetTcpConnection*,conn)
	DECLARE_NET_EVENT_MEMBER(class Message*,msg)
DECLARE_NET_EVENT_END()


//==================================================
///////////////////////////////Udp接受连接
DECLARE_NET_EVENT_BEGIN(Evt_NetUdpAccept)
	DECLARE_NET_EVENT_MEMBER(class NetUdpServer*,udpServer)
DECLARE_NET_EVENT_END()

///////////////////////////////Udp连接成功
DECLARE_NET_EVENT_BEGIN(Evt_NetUdpConnectOk)
	DECLARE_NET_EVENT_MEMBER(class NetUdpConnection*,conn)
DECLARE_NET_EVENT_END()

///////////////////////////////Udp连接失败
DECLARE_NET_EVENT_BEGIN(Evt_NetUdpConnectFail)
	DECLARE_NET_EVENT_MEMBER(class NetUdpConnection*,conn)
DECLARE_NET_EVENT_END()

///////////////////////////////Udp连接关闭
DECLARE_NET_EVENT_BEGIN(Evt_NetUdpClosed)
	DECLARE_NET_EVENT_MEMBER(class NetUdpConnection*,conn)
DECLARE_NET_EVENT_END()

///////////////////////////////Udp连接中断
DECLARE_NET_EVENT_BEGIN(Evt_NetUdpAbort)
	DECLARE_NET_EVENT_MEMBER(class NetUdpConnection*,conn)
DECLARE_NET_EVENT_END()

///////////////////////////////Udp连接错误
DECLARE_NET_EVENT_BEGIN(Evt_NetUdpError)
	DECLARE_NET_EVENT_MEMBER(class NetUdpConnection*,conn)
DECLARE_NET_EVENT_END()

///////////////////////////////Udp收到数据
DECLARE_NET_EVENT_BEGIN(Evt_NetUdpReceive)
	DECLARE_NET_EVENT_MEMBER(class NetUdpConnection*,conn)
	DECLARE_NET_EVENT_MEMBER(class Message*,msg)
DECLARE_NET_EVENT_END()


//==================================================
///////////////////////////////Xtcp接受连接
DECLARE_NET_EVENT_BEGIN(Evt_NetXtcpAccept)
	DECLARE_NET_EVENT_MEMBER(class NetXtcpServer*,xtcpServer)
DECLARE_NET_EVENT_END()

///////////////////////////////Xtcp连接成功
DECLARE_NET_EVENT_BEGIN(Evt_NetXtcpConnectOk)
	DECLARE_NET_EVENT_MEMBER(class NetXtcpConnection*,conn)
DECLARE_NET_EVENT_END()

///////////////////////////////Xtcp连接失败
DECLARE_NET_EVENT_BEGIN(Evt_NetXtcpConnectFail)
	DECLARE_NET_EVENT_MEMBER(class NetXtcpConnection*,conn)
DECLARE_NET_EVENT_END()

///////////////////////////////连接阻塞
DECLARE_NET_EVENT_BEGIN(Evt_NetXtcpBlocking)
	DECLARE_NET_EVENT_MEMBER(class NetXtcpConnection*, conn)
DECLARE_NET_EVENT_END()

///////////////////////////////连接恢复
DECLARE_NET_EVENT_BEGIN(Evt_NetXtcpRestored)
	DECLARE_NET_EVENT_MEMBER(class NetXtcpConnection*, conn)
DECLARE_NET_EVENT_END()

///////////////////////////////Xtcp连接关闭
DECLARE_NET_EVENT_BEGIN(Evt_NetXtcpClosed)
	DECLARE_NET_EVENT_MEMBER(class NetXtcpConnection*,conn)
DECLARE_NET_EVENT_END()

///////////////////////////////Xtcp连接中断
DECLARE_NET_EVENT_BEGIN(Evt_NetXtcpAbort)
	DECLARE_NET_EVENT_MEMBER(class NetXtcpConnection*,conn)
DECLARE_NET_EVENT_END()

///////////////////////////////Xtcp连接错误
DECLARE_NET_EVENT_BEGIN(Evt_NetXtcpError)
	DECLARE_NET_EVENT_MEMBER(class NetXtcpConnection*,conn)
DECLARE_NET_EVENT_END()

///////////////////////////////Xtcp收到数据
DECLARE_NET_EVENT_BEGIN(Evt_NetXtcpReceive)
	DECLARE_NET_EVENT_MEMBER(class NetXtcpConnection*,conn)
	DECLARE_NET_EVENT_MEMBER(class Message*,msg)
DECLARE_NET_EVENT_END()


//==================================================
///////////////////////////////Start
DECLARE_NET_EVENT_BEGIN(Evt_NetStart)
	DECLARE_NET_EVENT_MEMBER(class NetModule*,netModule)
	DECLARE_NET_EVENT_MEMBER(Uuid,socketId)
	DECLARE_NET_EVENT_MEMBER(uint16_t,port)
DECLARE_NET_EVENT_END()

///////////////////////////////Shutdown
DECLARE_NET_EVENT_BEGIN(Evt_NetShutdown)
	DECLARE_NET_EVENT_MEMBER(class NetModule*,netModule)
DECLARE_NET_EVENT_END()

///////////////////////////////接受连接
DECLARE_NET_EVENT_BEGIN(Evt_NetAccept)
	DECLARE_NET_EVENT_MEMBER(class NetModule*,netModule)
	DECLARE_NET_EVENT_MEMBER(NetAddress,addr)
DECLARE_NET_EVENT_END()

///////////////////////////////连接成功
DECLARE_NET_EVENT_BEGIN(Evt_NetConnectOk)
	DECLARE_NET_EVENT_MEMBER(class NetSession*,netSession)
DECLARE_NET_EVENT_END()

///////////////////////////////连接失败
DECLARE_NET_EVENT_BEGIN(Evt_NetConnectFail)
	DECLARE_NET_EVENT_MEMBER(class NetSession*,netSession)
DECLARE_NET_EVENT_END()

///////////////////////////////连接阻塞
DECLARE_NET_EVENT_BEGIN(Evt_NetBlocking)
	DECLARE_NET_EVENT_MEMBER(class NetSession*, netSession)
DECLARE_NET_EVENT_END()

///////////////////////////////连接恢复
DECLARE_NET_EVENT_BEGIN(Evt_NetRestored)
	DECLARE_NET_EVENT_MEMBER(class NetSession*, netSession)
DECLARE_NET_EVENT_END()

///////////////////////////////连接关闭
DECLARE_NET_EVENT_BEGIN(Evt_NetClosed)
	DECLARE_NET_EVENT_MEMBER(class NetSession*,netSession)
DECLARE_NET_EVENT_END()

///////////////////////////////连接中断
DECLARE_NET_EVENT_BEGIN(Evt_NetAbort)
	DECLARE_NET_EVENT_MEMBER(class NetSession*,netSession)
DECLARE_NET_EVENT_END()

///////////////////////////////连接错误
DECLARE_NET_EVENT_BEGIN(Evt_NetError)
	DECLARE_NET_EVENT_MEMBER(class NetSession*,netSession)
DECLARE_NET_EVENT_END()



} // namespace gdk
